export interface Gist {
    id?: string;
    owner?: string;
    description: string;
    public?: boolean;
    files: GistFiles;
}

export interface GistFiles {
    [fileName: string]: GistFile;
}

export interface GistFile {
    filename?: string;
    raw_url?: string;
    content: string;
}

export interface Api {
    // 服务地址
    url: string;

    getToken(): string;

    /**
     * 新建代码片段
     * @param gist 代码片段
     */
    create(gist: Gist): Promise<void>;

    /**
     * 获取当前用户的代码片段
     * @param limit 每页数量
     * @param page 页码(从1开始)
     */
    getList(limit: number, page: number): Promise<Gist[]>;

    /**
     * 获取公开的代码片段
     * @param limit 每页数量
     * @param page 页码(从1开始)
     */
    getPublicList(limit: number, page: number): Promise<Gist[]>;
    
    /**
     * 修改代码片段
     * @param gist 代码片段
     */
    edit(gist: Gist): Promise<void>;

    /**
     * 删除代码片段
     * @param id 代码片段id
     */
    delete(id: string): Promise<void>;

    /**
     * 
     * @param id 代码片段id
     * @param fileName 要删除的文件
     */
    deleteFile(id: string, fileName: string): Promise<void>;

    /**
     * 获取一条代码片段
     * @param id 代码片段id
     */
    getSingle(id: string): Promise<Gist>;

    /**
     * 获取代码片段的内容
     * @param gistFile 代码片段
     */
    getContent(gistFile: GistFile): Promise<string>;
}